<!--
 - MineAdmin is committed to providing solutions for quickly building web applications
 - Please view the LICENSE file that was distributed with this source code,
 - For the full copyright and license information.
 - Thank you very much for using MineAdmin.
 -
 - @Author X.Mo<root@imoi.cn>
 - @Link   https://gitee.com/xmo/mineadmin-vue
-->
<template>
  <div>
    <ma-image-upload v-if="props.type === 'image'" v-model="file" />
    <ma-file-upload v-if="props.type === 'file'" v-model="file" />
    <ma-chunk-upload v-if="props.type === 'chunk'" v-model="file" />
  </div>
</template>
<script setup>
import { ref, watch, provide } from 'vue'
import { Message } from '@arco-design/web-vue'

import uploadConfig from '@/config/upload'
import MaImageUpload from './components/image-upload.vue'
import MaFileUpload from './components/file-upload.vue'
import MaChunkUpload from './components/chunk-upload.vue'

const emit = defineEmits(['update:modelValue'])
const file = ref()
const props = defineProps({
  modelValue: { type: [ String, Number, Array ], default: () => {} },
  title: { type: String, default: 'buttonText', },
  icon: { type: String, default: 'icon-plus'},
  rounded: { type: Boolean, default: false },
  multiple: { type: Boolean, default: false },
  disabled: { type: Boolean, default: false },
  draggable: { type: Boolean, default: false },
  size: { type: Number, default: 4 * 1024 * 1024 },
  chunk: { type: Boolean, default: false },
  chunkSize: { type: Number, default: 1 * 1024 * 1024 },
  limit: { type: Number, default: 0 },
  tip: { type: String, default: undefined },
  type: { type: String, default: 'image' },
  accept: { type: String, default: '*' },
  returnType: { type: String, default: 'hash' },
  fileType: { type: String, default: 'button' },
  showList: { type: Boolean, default: true },
  requestData: { type: Object, default: {} },
})

if (! ['id', 'url', 'hash'].includes(props.returnType)) {
  Message.error('MaUpload组件props的returnType只能为：id, url, hash 其中一个')
  console.error('MaUpload组件props的returnType只能为：id, url, hash 其中一个')
}

watch(() => props.modelValue, (val) => {
  file.value = val
}, {
  deep: true, immediate: true
})

provide('storageMode', uploadConfig.storageMode)
provide('config', props)

watch(
  () => file.value,
  vl => emit('update:modelValue', vl)
)
</script>